package org.deng.learn.designpattern.flyweight;

/**
 * @author DengLibin
 * @Description
 * 享元模式（Flyweight），结构型设计模式。有时候，我们需要频繁创建大量非常轻量级的对象，用于表示某些业务对象。
 * 这种情况下，虽然对象非常轻量，但是依然会占用非常多的内存，甚至引起OutOfMemoryException。享元模式（Flyweight）就是解决这一问题的一种方法。
 * 享元模式（Flyweight）涉及到了对象的创建，所以通常情况下会与工厂一起使用（注意不是一定）。
 * 另外为了保证管理这些对象的工厂本身不会被创建多次导致占用更多的内存，工厂本身根据情况可以设计为单例类
 * @Date 2019/3/7 0007 17:35
 */
public class Main {

    public static  void main(String[] args){
        FontFactory fontFactory = FontFactory.getInstance();
     /*   Font songTi = fontFactory.getFont("宋体");
        Font songTi2 = fontFactory.getFont("宋体");
        Font kaiTi = fontFactory.getFont("楷体");
        System.out.println(songTi);
        System.out.println(songTi2); //和songT1是同一个对象
        System.out.println(kaiTi);*/

     //多线程测试
        for(int i = 0; i < 20; i++){
                new Thread(()->{
                    Font heiTi = fontFactory.getFont("黑体");
                    System.out.println(heiTi);
                }).start();
        }
    }
}
